home *** CD-ROM | disk | FTP | other *** search
- /*
- * astgmt.c ATARI ST Kermit: GEM interface to Transfer functions
- */
-
- #include <osbind.h> /* TOS bindings */
- #include <stdio.h> /* common I/O defintions */
- #include <obdefs.h> /* common object defintions */
- #include <gemdefs.h> /* GEM defintions */
- #include "astinc.h" /* common KERMIT defintions */
- #include "astobj.h" /* KERMIT object definitions */
-
- OBJECT
- *optr, /* pointer to an object */
- *displo; /* pointer to the Transfer Display Object */
-
- int old_n, /* old packet number */
- old_n_total, /* old total count */
- old_bps, /* old bps */
- old_timcnt, /* old timeout count */
- old_nakcnt; /* old nak counter */
-
- long int
- old_bytecnt; /* old byte count */
-
-
- /*
- * handle transfer commands
- */
- do_transfer(menuix)
- int menuix;
- {
- int ready, doit;
- char savfnam[13];
- rsrc_gaddr(R_TREE,KERDISPL,&displo);
- tvar_init();
- switch (menuix)
- {
- case TPUT:
- displo[KDSENDS].ob_flags &= ~HIDETREE;
- displ_object(KRTDOPUT,-1,0,MTRANS,&optr);
- doit = fsetfilename(gpathname,filnam);
- strcpy(savfnam,filnam);
- destroy_object(KRTDOPUT,-1,0,MTRANS);
- goto do_send;
- case TSEND:
- displo[KDSEND].ob_flags &= ~HIDETREE;
- displ_object(KRTDOSND,-1,0,MTRANS,&optr);
- doit = fsetfilename(gpathname,filnam);
- strcpy(savfnam,filnam);
- destroy_object(KRTDOSND,-1,0,MTRANS);
- do_send:
- if (!doit) return;
- dt_files(FALSE);
- displ_object(KERDISPL,-1,-1,MTRANS,&displo);
- msgall(-1,MSGSNDBG,gpathname,filnam);
- if (!f1stfil(filnam))
- msgall(KRFILNEX,MSGFILNX);
- else
- {
- fp = NIL;
- if (ready = sendsw())
- msgall(-1,MSGSNDRD);
- else
- msgall(-1,MSGSNDFD);
- };
- break;
- case TGET:
- rsrc_gaddr(R_TREE,KRTASKG,&optr);
- change_state(optr,KRTASKAB,NORMAL);
- change_state(optr,KRTASKOK,NORMAL);
- displ_object(KRTASKG,-1,-1,MTRANS,&optr);
- doit = form_do(optr,KRTGFILN);
- destroy_object(KRTASKG,-1,-1,MTRANS);
- if (doit == KRTASKAB) return;
- strcpy(filnam1,optr[KRTGFILN].ob_spec->te_ptext);
- if (strlen(filnam1) == 0) return;
- displo[KDRECEIV].ob_flags &= ~HIDETREE;
- displ_object(KRTDOGET,-1,0,MTRANS,&optr);
- doit = fsetfilename(gpathname,filnam);
- strcpy(savfnam,filnam);
- destroy_object(KRTDOGET,-1,0,MTRANS);
- dt_files(FALSE);
- displ_object(KERDISPL,-1,-1,MTRANS,&displo);
- msgall(-1,MSGGETBG,filnam1,gpathname,filnam);
- fp = NULL;
- if (ready = getsw())
- msgall(-1,MSGGETRD);
- else
- msgall(-1,MSGGETFD);
- break;
- case TRECEIVE:
- displo[KDRECEIV].ob_flags &= ~HIDETREE;
- displ_object(KRTDOREC,-1,0,MTRANS,&optr);
- doit = fsetfilename(gpathname,filnam);
- strcpy(savfnam,filnam);
- destroy_object(KRTDOREC,-1,0,MTRANS);
- if (!doit) return;
- dt_files(FALSE);
- displ_object(KERDISPL,-1,-1,MTRANS,&displo);
- msgall(-1,MSGRECBG,gpathname,filnam);
- fp = NULL;
- if (ready = recsw())
- msgall(-1,MSGRECRD);
- else
- msgall(-1,MSGRECFD);
- break;
- case TFINISH:
- displo[KDFINISH].ob_flags &= ~HIDETREE;
- displ_object(KERDISPL,-1,-1,MTRANS,&displo);
- msgall(-1,MSGSRVFI);
- if (ready = gencmdsw('F'))
- msgall(-1,MSGFINRD);
- else
- msgall(KSVFERR,MSGFINFD);
- break;
- case TBYE:
- displo[KDBYE].ob_flags &= ~HIDETREE;
- displ_object(KERDISPL,-1,-1,MTRANS,&displo);
- msgall(-1,MSGSRVBY);
- if (ready = gencmdsw('L'))
- msgall(-1,MSGBYERD);
- else
- msgall(KSVBERR,MSGBYEFD);
- break;
- };
- if (ready)
- change_state(displo,KRDABORT,DISABLED);
- else
- change_state(displo,KRDABORT,DISABLED | SELECTED);
- redisp_fld(KRDABORT,NIL,NIL);
- change_state(displo,KRDRFCTI,DISABLED);
- redisp_fld(KRDRFCTI,NIL,NIL);
- change_state(displo,KRDRDYOK,NORMAL);
- redisp_fld(KRDRDYOK,NIL,NIL);
- Cconout(0x07);
- form_do(displo,-1);
- destroy_object(KERDISPL,-1,-1,MTRANS);
- if (fp != NULL) fclose(fp);
- strcpy(filnam,savfnam);
- }
-
-
-
- /* some display utilities for the transfer function */
-
- /*
- * access of message strings
- * will be used mostly by prtdeb & prtlog
- */
- char *msg_string(ix)
- int ix;
- {
- OBJECT *oprt;
- rsrc_gaddr(R_TREE,KRMESSS,&oprt);
- return (oprt[ix].ob_spec);
- }
-
- /*
- * initialize transfer variables
- * and transfer display object
- */
- tvar_init()
- {
- /* init vars */
- numtry = getfile = n = n_total = filecnt = bps = nakcnt = timcnt = 0;
- old_n = old_n_total = old_bps = old_nakcnt = old_timcnt = 0;
- bytecnt = old_bytecnt = 0L;
- fp = NULL;
- strcpy(filnam1,"\0");
- /* init display object */
- change_state(displo,KRDABORT,NORMAL);
- change_state(displo,KRDRFCTI,NORMAL);
- change_state(displo,KRDRDYOK,DISABLED);
- displo[KDSEND].ob_flags |= HIDETREE;
- displo[KDSENDS].ob_flags |= HIDETREE;
- displo[KDRECEIV].ob_flags |= HIDETREE;
- displo[KDRECEIS].ob_flags |= HIDETREE;
- displo[KDFINISH].ob_flags |= HIDETREE;
- displo[KDBYE].ob_flags |= HIDETREE;
- dt_files(FALSE);
- dt_packets(FALSE);
- }
-
- /*
- * update file fields and redisplay
- */
- dt_files(dp_change)
- int dp_change;
- {
- char *dest;
- char tname[21];
- dest = displo[KDFILNAM].ob_spec->te_ptext;
- strncpy(tname,filnam,21);
- tname[21] = '\0';
- sprintf(dest,"%s",tname);
- dest = displo[KDCNVFIL].ob_spec->te_ptext;
- strncpy(tname,filnam1,21);
- tname[21] = '\0';
- sprintf(dest,"%s",tname);
- sprintf(displo[KDFCNT].ob_spec->te_ptext,"%d",filecnt);
- if (dp_change)
- {
- redisp_fld(KDFILNAM,NIL,NIL);
- redisp_fld(KDCNVFIL,NIL,NIL);
- redisp_fld(KDFCNT,NIL,NIL);
- };
- }
-
- /*
- * update packet fields and redisplay
- */
- dt_packets(dp_change)
- int dp_change;
- {
- sprintf(displo[KDPCNT].ob_spec->te_ptext,"%d",n_total);
- sprintf(displo[KDBCNT].ob_spec->te_ptext,"%ld",bytecnt);
- sprintf(displo[KDPNUM].ob_spec->te_ptext,"%02x",n);
- sprintf(displo[KDBPS].ob_spec->te_ptext,"%d",bps);
- sprintf(displo[KDNAKCNT].ob_spec->te_ptext,"%d",nakcnt);
- sprintf(displo[KDTIMCNT].ob_spec->te_ptext,"%d",timcnt);
- if (dp_change)
- {
- redisp_fld(KDPCNT,&n_total,&old_n_total);
- if (bytecnt != old_bytecnt) redisp_fld(KDBCNT,NIL,NIL);
- old_bytecnt = bytecnt;
- redisp_fld(KDPNUM,&n,&old_n);
- redisp_fld(KDBPS,&bps,&old_bps);
- redisp_fld(KDNAKCNT,&nakcnt,&old_nakcnt);
- redisp_fld(KDTIMCNT,&timcnt,&old_timcnt);
- };
- }
-
-
- /*
- * redisplay a field in the transfer display object
- */
- redisp_fld(ix,new,old)
- int ix;
- int *new, *old;
- {
- int absx, absy;
- OBJECT *cobj;
- if ((new != NIL) && (old != NIL))
- {
- if (*new == *old)
- return;
- else
- *old = *new;
- };
- cobj = &(displo[ix]);
- objc_offset(displo,ix,&absx,&absy);
- objc_draw(displo,ROOT,MAX_DEPTH,absx,absy,cobj->ob_width,cobj->ob_height);
- }
-
- /*
- * display an error packet message
- */
- displ_pckerr(msg)
- char *msg;
- {
- OBJECT *addr,*krabort;
- int maxslen;
- char *dest;
- rsrc_gaddr(R_TREE,KRABORT,&krabort);
- dest = krabort[KRABMESS].ob_spec->te_ptext;
- maxslen = strlen(krabort[KRABMESS].ob_spec->te_pvalid) - 1;
- strncpy(dest,msg,maxslen);
- dest[maxslen] = '\0';
- displ_object(KRABORT,-1,-1,-1,&addr);
- form_do(addr,-1);
- change_state(addr,KRABOK,NORMAL);
- destroy_object(KRABORT,-1,-1,-1);
- displ_object(KERDISPL,-1,-1,-2,&addr);
- }
-
-
- /*
- * wait the specified milli seconds
- * and additionally for a click on the ABORT box
- * in the display object
- */
- sleepwait(msecs)
- int msecs;
- {
- int event, dummy, dummy1, dummy2, mx, my;
- event = evnt_multi((MU_TIMER | MU_BUTTON), 1, 1, 1,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- &dummy,
- msecs, 0,
- &mx, &my,
- &dummy, &dummy, &dummy1, &dummy2);
- if (MU_BUTTON & event)
- if (objc_find(displo, KRDABORT, 1, mx, my) == KRDABORT)
- {
- change_state(displo,KRDABORT,SELECTED);
- redisp_fld(KRDABORT,NIL,NIL);
- if (displ_alert(1,KRCONFAB) != 1)
- return ('A');
- change_state(displo,KRDABORT,NORMAL);
- redisp_fld(KRDABORT,NIL,NIL);
- return(FALSE);
- }
- else
- if (objc_find(displo, KRDRFCTI, 1, mx, my) == KRDRFCTI)
- {
- change_state(displo,KRDRFCTI,SELECTED);
- redisp_fld(KRDRFCTI,NIL,NIL);
- evnt_timer(200,0);
- change_state(displo,KRDRFCTI,NORMAL);
- redisp_fld(KRDRFCTI,NIL,NIL);
- return('T');
- }
- else
- Cconout(0x07);
- return(FALSE);
- }